import MarkdownIt from 'markdown-it';
import path from 'path-browserify';


const DEFAULT_ROOT_DIR = "./src/blogs"

function imagePlugin(md: MarkdownIt) {
    const defaultRender = md.renderer.rules.image || function (tokens, idx, options, env, self) {
        return self.renderToken(tokens, idx, options);
    };
    // md.block.ruler.before('image', 'myplugin', function (state,startLine,endLine) {
    //
    //     console.log("state", state)
    //     console.log("startLine", startLine)
    //     console.log("endLine", endLine)
    //     return true;
    // })
    md.renderer.rules.image = (tokens, idx, options, env, self) => {
        // console.log("tokens", tokens)
        // console.log("idx", idx)
        // console.log("options", options)
        // console.log("env", env)
        // console.log("self", self)
        const token = tokens[idx];
        const srcIndex = token.attrIndex('src');
        let customAttrs: Record<string, string> = {};
        if (srcIndex >= 0) {
            let src = token.attrs[srcIndex][1];
            // 文件地址 DEFAULT_ROOT_DIR + src
            // src = path.join(DEFAULT_ROOT_DIR, src)

            // 如果是以 http 或 https 开头的 URL，不做处理
            if (!/^https?:\/\//i.test(src)) {
                // 全文件目录
                const filePath = path.join(DEFAULT_ROOT_DIR, env.docPath)
                // 拼接图片地址
                // reImagePath 是图片相对于文件的地址，而文件的绝对地址是 filePath
                // 那么图片的绝对路径就是
                // 图片的绝对路径
                 // path.resolve(path.dirname(filePath), reImagePath);
                tokens[idx].attrs[srcIndex][1] = path.join(path.dirname(filePath), src);
            }
        }

        // 查找并处理 {} 中的自定义属性
        const text = tokens[1]
        if (text) {
            let attrsString = text.content.trim();
            // 去掉该字符串中的 { 和 }
            attrsString = attrsString.replace(/^\{(.+?)\}$/, "$1");
            attrsString.split(',').forEach(attr => {
                const [key, value] = attr.split('=').map(s => s.trim());
                if (key && value) {
                    customAttrs[key] = value;
                }
            });
            // 将自定义属性添加到 <img> 标签中
            for (const [key, value] of Object.entries(customAttrs)) {
                tokens[idx].attrs.push([key, value])
            }
        }
        return defaultRender(tokens, idx, options, env, self);
    };
}

/**
 * 两个文件地址拼接
 */
function joinPath(basePath: string, relativePath: string): string {
    // basePath 和 relativePath 都是有值
    // 如果 basePath 以 / 结尾 而 relativePath 没有以 / 开头
    // 如果 basePath 没有 / 结尾 而 relativePath 没有以 / 开头
    if (basePath.endsWith('/') && !relativePath.startsWith('/')) {
        return basePath + relativePath;
    } else if (!basePath.endsWith('/') && !relativePath.startsWith('/')) {
        return basePath + '/' + relativePath;
    } else {
        return basePath + relativePath;
    }
}

export default imagePlugin;
